According to the FASTSORT manual, the SORTPROG program has to be licensed to make it work.
This is called 'SQL LICENSE'.
In case SORTPROG is NOT licensed, SORT abends with an error, e.g.:

$GHS1 SECOM 6> sort
FastSort - T9620D44 - (19MAY97)
COPYRIGHT TANDEM COMPUTERS INCORPORATED 1991-1996
<from a
<to b
<asc 1:40
<run
*** ERROR *** an error has prevented creation of the sort process.
PROCESS_CREATE_ ERROR: %000021
PROCESS COMMUNICATION ERROR
<EOF!
STOPPED: 1,308
CPU time: 0:00:00.014
2: Process terminated with fatal errors or diagnostics
Termination Info: 4
Subsystem: TANDEM.SORT.0
Sort Execution Errors/Warnings Detected
$GHS1 SECOM 7>

The LICENSE tool takes this into account, and licenses SORTPROG in case it is NOT licensed.



Hi Carl,

PROCESS_CREATE_ ERROR: %000021 is decimal 17.
Error 17 is described as "unlicensed priviledged program".
Currently SORTPROG contains a CALLABLE procedure LOADML^CALLABLE^OPEN.
Therefore SORTPROG must be LICENSED.

Below is a comment extracted from the source file:

?PAGE "LoadML^Callable^Open"
!
!  This proc is used to open SQL tables as a priv caller, to
!  allow TMF Recovery access to be specified.  This is intended
!  to be a temporary solution to the problem of loading a
!  partition of an audited table without requiring that the table's
!  audit attribute be turned off.  This should be eliminated once
!  DP2 implements our request to provide a safe way for nonpriv
!  callers to load into an audited table.
!
!  This proc should contain nothing but the call to OPEN, to
!  minimize the risks involved when executing in priv mode.
!  It does not check its parameters because we are relying on OPEN's
!  checking to catch any bad addresses.  (There is a small exposure
!  in that approach, since an address that points into this proc's
!  stack mark won't be caught as an error, but I think we can
!  accept that risk, especially since this code should have a fairly
!  short lifetime.

PROC LoadML^Callable^Open( FileName, FileNumber, OpenFlags,
                           SyncDepth, DM^Open )             CALLABLE;
INT     .FileName;
INT     .FileNumber;
INT      OpenFlags;
INT      SyncDepth;
INT .EXT DM^Open;
BEGIN

        CALL Open( FileName, FileNumber, OpenFlags,
                   SyncDepth, ,,,,, DM^Open );
END;

Regards,
Horst Kallenbach

